
import 'package:flutter/material.dart';
import 'package:flutter_deer/indent/indent_router.dart';
import 'package:flutter_deer/indent/page/indent_list_page.dart';
import 'package:flutter_deer/indent/provider/indent_page_provider.dart';
import 'package:flutter_deer/res/resources.dart';
import 'package:flutter_deer/routers/fluro_navigator.dart';
import 'package:flutter_deer/util/other_utils.dart';
import 'package:flutter_deer/util/theme_utils.dart';
import 'package:flutter_deer/widgets/load_image.dart';
import 'package:flutter_gen/gen_l10n/deer_localizations.dart';
import 'package:provider/provider.dart';


class IndentPage extends StatefulWidget {

  const IndentPage({super.key});

  @override
  _IndentPageState createState() => _IndentPageState();
}

class _IndentPageState extends State<IndentPage> with SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin {

  TabController? _tabController;
  final PageController _pageController = PageController();
  IndentPageProvider provider = IndentPageProvider();
  final GlobalKey _bodyKey = GlobalKey();
  List<IndentListPage> pages = [];

  @override
  void initState() {
    super.initState();
    pages = [IndentListPage(index: 0,),IndentListPage(index: 1,),IndentListPage(index: 2,)];
    _tabController = TabController(vsync: this, length: 3);
  }

  @override
  void dispose() {
    _tabController?.dispose();
    super.dispose();
  }

  @override
  // ignore: must_call_super
  void didChangeDependencies() {
    super.didChangeDependencies();
  }

  @override
  Widget build(BuildContext context) {
    super.build(context);
    final Color? iconColor = ThemeUtils.getIconColor(context);
    double textWidth = 0;
    List<String> titles = [DeerLocalizations.of(context)!.waitLottery.nullSafe,DeerLocalizations.of(context)!.winLottery.nullSafe,DeerLocalizations.of(context)!.lossLottery.nullSafe];
    for(int i=0;i<titles.length;i++){
      TextPainter textPainter = TextPainter(
        text: TextSpan(
          text: titles.elementAt(i),
        ),
        textDirection: TextDirection.ltr,
      );
      textPainter.layout();
      if(textWidth<textPainter.size.width){
        textWidth = textPainter.size.width;
      }
    }
     return ChangeNotifierProvider<IndentPageProvider>(
      create: (_) => provider,
      child: Scaffold(
        appBar: AppBar(
          centerTitle: true,
          title: Text('${DeerLocalizations.of(context)!.meOrder.nullSafe}',style: TextStyle(fontSize: Dimens.font_sp18,color: context.isDark?Colours.text_gray : Colours.text,)),
          actions: <Widget>[
            IconButton(
              tooltip: '${DeerLocalizations.of(context)!.searchOrder.nullSafe}',
              onPressed: () => NavigatorUtils.push(context, IndentRouter.indentSearchPage),
              icon: LoadAssetImage(
                'goods/search',
                key: const Key('search'),
                width: 24.0,
                height: 24.0,
                color: iconColor,
              ),
            )
          ]
        ),
        body: Column(
          key: _bodyKey,
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            Container(
              // 隐藏点击效果
              padding: EdgeInsets.only(left: 0.0,right: 0.0),
              color: context.backgroundColor,
              child: TabBar(
                onTap: (index) {
                  if (!mounted) {
                    return;
                  }
                  _pageController.jumpToPage(index);
                },
                isScrollable: true,
                controller: _tabController,
                labelStyle: TextStyles.textBold18,
                indicatorSize: TabBarIndicatorSize.label,
                labelPadding: EdgeInsets.zero,
                unselectedLabelColor: context.isDark ? Colours.text_gray : Colours.text,
                labelColor: Theme.of(context).primaryColor,
                indicatorPadding: EdgeInsets.only(right: 18,left: 18),
                tabs: <Widget>[
                  _TabView('${DeerLocalizations.of(context)!.waitLottery.nullSafe}', 0,textWidth),
                  _TabView('${DeerLocalizations.of(context)!.winLottery.nullSafe}', 1,textWidth),
                  _TabView('${DeerLocalizations.of(context)!.lossLottery.nullSafe}', 2,textWidth)
                  // _TabView('已撤销', 3)
                ],
              ),
            ),
            Gaps.line,
            Expanded(
              child: PageView.builder(
                key: Key('pageView'),
                itemCount: 3,
                onPageChanged: _onPageChange,
                controller: _pageController,
                itemBuilder: (_, int index) => pages.elementAt(index)
              )
            )
          ]
        )
      )
     );
  }

  void _onPageChange(int index) {
    if (!mounted) {
      return;
    }
    provider.setIndex(index);
    _tabController?.animateTo(index);
    _pageController.jumpToPage(index);
  }

  @override
  bool get wantKeepAlive => false;

}



class _TabView extends StatelessWidget {
  
  const _TabView(this.tabName, this.index,this.maxLabelWidth);
  
  final String tabName;
  final int index;
  final double maxLabelWidth;
  
  @override
  Widget build(BuildContext context) {
    if(maxLabelWidth>MediaQuery.of(context).size.width/3-66) {
      return Tab(
          child: Padding(padding: EdgeInsets.only(left: 10, right: 10),
            child: Text(tabName),
          )
      );
    }else{
      return Tab(
        child: SizedBox(
          width: MediaQuery.of(context).size.width/3-36,
          child: Row(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(tabName)
            ],
          ),
        ),
      );
    }
  }
}
